<template>
  <div class="tinymce-container editor-container">
    <textarea class="tinymce-textarea" :id="tinymceId">请输入内容</textarea>
    <!--<div class="editor-custom-btn-container">-->
      <!--<editorImage color="#888888" class="editor-upload-btn" @successCBK="imageSuccessCBK"></editorImage>-->
    <!--</div>-->
  </div>
</template>

<script>
  import editorImage from './components/editorImage'
  import plugins from './plugins'
  import toolbar from './toolbar'

  export default {
    name: 'tinymce',
    components: { editorImage },
    props: {
      init: Boolean,
      id: {
        type: String
      },
      value: {
        type: String,
        default: ''
      },
      toolbar: {
        type: Array,
        required: false,
        default() {
          return []
        }
      },
      menubar: {
        default: 'file edit insert view format table'
      },
      height: {
        type: Number,
        required: false,
        default: 360
      }
    },
    data() {
      return {
        hasChange: false,
        hasInit: false,
        tinymceId: this.id || 'vue-tinymce-' + +new Date()
      }
    },
    watch: {
      value(val) {
        if (!this.hasChange && this.hasInit) {
          // console.log('watch-value', val)
          this.$nextTick(() => window.tinymce.get(this.tinymceId).setContent(val))
        }
      },
      init(value) {
        if (value) {
          // console.log(value)
          // console.log(this.value)
          this.initTinymce()
        } else {
          // console.log(value)
          this.destroyTinymce()
        }
      }
    },
    mounted() {
      this.initTinymce()
    },
    activated() {
      this.initTinymce()
    },
    deactivated() {
      this.destroyTinymce()
    },
    methods: {
      initTinymce() {
        const _this = this
        window.tinymce.init({
          selector: `#${this.tinymceId}`,
          height: this.height,
          body_class: 'panel-body',
          object_resizing: false,
          toolbar: this.toolbar.length > 0 ? this.toolbar : toolbar,
          menubar: this.menubar,
          plugins: plugins,
          language: 'zh_CN',
          forced_root_block: false,
          end_container_on_empty_block: true,
          powerpaste_word_import: 'clean',
          code_dialog_height: 450,
          code_dialog_width: 1000,
          advlist_bullet_styles: 'square',
          advlist_number_styles: 'default',
          imagetools_cors_hosts: ['www.tinymce.com', 'codepen.io'],
          default_link_target: '_blank',
          link_title: false,
          init_instance_callback: editor => {
            if (_this.value) {
              // console.log('_this.value', _this.value)
              // console.log('getBody', editor.getBody().innerHTML)
              editor.getBody().innerHTML = _this.value
            }
            _this.hasInit = true
            editor.on('NodeChange Change KeyUp', () => {
              this.hasChange = true
              // console.log('change', editor.getBody().innerHTML)
              this.$emit('input', editor.getBody().innerHTML)
            })
          }
        })
      },
      destroyTinymce() {
        if (window.tinymce.get(this.tinymceId)) {
          window.tinymce.get(this.tinymceId).destroy()
          // console.log('destory')
        }
      },
      setContent(value) {
        window.tinymce.get(this.tinymceId).setContent(value)
        // console.log('set-val', value)
      },
      getContent() {
        window.tinymce.get(this.tinymceId).getContent()
        // console.log('getContent', window.tinymce.get(this.tinymceId).getContent())
      },
      imageSuccessCBK(arr) {
        const _this = this
        arr.forEach(v => {
          window.tinymce.get(_this.tinymceId).insertContent(`<img class="wscnph" src="${v.url}" >`)
        })
      }
    },
    destroyed() {
      this.destroyTinymce()
    }
  }
</script>

<style scoped>
  .tinymce-container {
    position: relative
  }
  .tinymce-textarea {
    visibility: hidden;
    z-index: -1;
  }
  .editor-custom-btn-container {
    position: absolute;
    right: 4px;
    top: 4px;
    /*z-index: 2005;*/
  }
  .editor-upload-btn {
    display: inline-block;
  }
</style>
